数据结构分类
线性结构
数组
数组的添加、修改、删除、查找
动态数组
链表
动态数据结构
数据存在“节点”(Node)中
单向链表
双向链表
循环链表
数组链表
在链表头、中间、末尾添加元素,链表的遍历和查找,链表修改指定元素,删除链表元素
虚拟头结点
栈
先进后出(LIFO)
实现方式:
数组
链表:操作表头
入栈、出栈、获取栈顶元素、栈的大小
案例:括号匹配
队列
先进先出(FIFO)
循环队列
实现方式:
数组
链表:链表头出对,链表尾入队
哈希表
树结构
二叉树
每个节点最多只有两个子节点,每个节点最多只有一个父节点
一个节点也是一颗二叉树,空也是一颗二叉树
二分搜索树
二分搜索树是二叉树
每个节点的值,大于其左子树的所有节点的值,小于其右子树的所有节点的值。
每一颗子树也是二分搜索树。
前序遍历、中序遍历、后序遍历、层序遍历(广度优先遍历)
堆
优先队列
二叉堆,是一种完全二叉树
堆中某个节点的值总是不大于其父节点的值(最大堆)
Sift Up,Sift Down
线段树(区间树)
期间染色
线段树是一种平衡二叉树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点
Trie(字典树、前缀树)
并查集
AVL
红黑树
Treap、Splay、K-D树、哈夫曼树......
图结构
邻接矩阵、邻接表